package com.vhall.component.controller.account.facade.api;

import com.alibaba.fastjson.JSONObject;
import com.vhall.component.entity.account.dto.ExchangeSessionIdDTO;
import com.vhall.component.entity.account.vo.*;
import com.vhall.component.plugin.common.support.Token;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;

/**
 * 用户登录-嘉宾助理-口令登录
 *
 * @author longzhen.gong   v4/account/api/auth/assistant  嘉宾助理 口令登录
 * @date 2021/6/9 16:43
 */
@Api(tags = "ApiAuthController", value = "用户登录")
@FeignClient(value = "ApiAuthFacade", contextId = "ApiAuthFacade", path = "/v4/account/api/auth")
public interface ApiAuthFacade {

    /**
     * 登录
     *
     * @param authLoginVO 参数
     * @return 返回值
     */
    @ApiOperation("登录")
    @PostMapping(value = "/login")
    AuthLoginRspVO login(@Validated AuthLoginVO authLoginVO);

    /**
     * 登出
     *
     * @param authLogoutVO 参数
     */
    @ApiOperation("登出")
    @PostMapping(value = "/logout")
    void logout(@Validated AuthLogoutVO authLogoutVO);

    /**
     * 观众端登录,嘉宾助理
     *
     * @param authLoginVO 参数
     * @return 返回值
     */
    @ApiOperation("观众端登录,嘉宾助理")
    @PostMapping("/login-watch")
    AuthLoginRspVO loginWatch(@Validated AuthLoginVO authLoginVO);


    /**
     * 新版本嘉宾  助理 登录
     *
     * @param authLoginVO 参数
     * @return 登录信息
     */
    @ApiOperation("观众端登录,嘉宾助理")
    @PostMapping("/assistant")
    AuthLoginRspVO loginAssistant(@Validated AssistantLoginVO authLoginVO);

    /**
     * 主播登录
     *
     * @param vo 参数
     * @return 登录信息
     */
    @PostMapping("/login-anchor")
    AuthLoginRspVO loginAnchor(@Validated AnchorLoginVO vo);

    /**
     * 观众的 sso 登录
     *
     * @param vo 参数
     * @return 登录信息
     */
    @PostMapping("/login-watch-sso")
    AuthLoginRspVO loginWatchSso(@Validated WatchLoginSsoVO vo);

    /**
     * 第三方用户登录
     *
     * @param authLoginVO 参数
     * @return 返回值
     */
    @ApiOperation("第三方用户登录")
    @PostMapping("/third-login")
    ThirdAuthLoginRspVO thirdLogin(@Validated ThirdAuthLoginVO authLoginVO);

    /**
     * 游客登录
     *
     * @param authLoginVO 参数
     * @return 返回值
     */
    @ApiOperation("游客登录")
    @PostMapping("/visitor")
    VisitorAuthLoginRspVO visitor(@Validated VisitorAuthLoginVO authLoginVO);

    /**
     * 获取5个随机未使用过的昵称
     */
    @ApiOperation("获取5个随机未使用过的昵称")
    @GetMapping("/random_nicknames")
    List<NicknamesVO> getRandomNicknames();

    /**
     * 根据token获取用户信息
     *
     * @return 返回值
     */
    @ApiOperation("根据token获取用户信息")
    @GetMapping("/get-info")
    Token getInfoBytoken();

    /**
     * 使用微信的 ticket 换取国信的 sessionId
     * @param ticket
     * @return
     */
    @GetMapping("/wx/access")
    JSONObject exchangeSessionId(ExchangeSessionIdDTO ticket);
}
